package com.itheima.core.service.product;

import java.util.Date;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;

import org.apache.solr.client.solrj.SolrServer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.itheima.core.dao.product.ProductDao;
import com.itheima.core.dao.product.SkuDao;
import com.itheima.core.pojo.product.Product;
import com.itheima.core.pojo.product.ProductQuery;
import com.itheima.core.pojo.product.ProductQuery.Criteria;
import com.itheima.core.pojo.product.Sku;

import cn.itcast.common.page.Pagination;
import redis.clients.jedis.Jedis;

/**
 * @author zhang.cheng
 *
 *         2017年3月2日
 */
@Service("productService")
@Transactional
public class ProductServiceImpl implements ProductService {

	@Autowired
	private ProductDao productDao;

	@Autowired
	private SkuDao skuDao;

	@Override
	public Pagination selectPaginationForProduct(String name, Boolean isShow, Integer pageNo, Long brandId) {
		ProductQuery productQuery = new ProductQuery();
		// 当前页
		productQuery.setPageNo(Pagination.cpn(pageNo));
		// 每页数
		productQuery.setPageSize(3);
		Criteria createCriteria = productQuery.createCriteria();
		StringBuilder sb = new StringBuilder();
		// 名称
		if (null != name) {
			createCriteria.andNameLike("%" + name + "%");
			sb.append("name=").append(name);
		}
		if (brandId != null) {
			createCriteria.andBrandIdEqualTo(brandId);
			sb.append("&brandId=").append(brandId);
		}
		// 上下架
		if (isShow != null) {
			createCriteria.andIsShowEqualTo(isShow);
			sb.append("&isShow=").append(isShow);
		} else {
			createCriteria.andIsShowEqualTo(false);
			sb.append("&isShow=").append(false);
		}
		// 创建分页对象
		Pagination pagination = new Pagination(productQuery.getPageNo(), productQuery.getPageSize(),
				productDao.countByExample(productQuery), productDao.selectByExample(productQuery));
		// 分页在页面上展示
		String url = "/product/list.do";
		pagination.pageView(url, sb.toString());

		return pagination;
	}

	@Autowired
	private Jedis jedis;

	@Override
	public void insertProduct(Product product) {
		// 数据id自增长
		Long id = jedis.incr("pno");
		product.setId(id);

		// 下架
		product.setIsShow(false);
		// 不删除
		product.setIsDel(true);
		// 时间
		product.setCreateTime(new Date());
		// 是否新品
		if (product.getIsNew() == null) {
			product.setIsNew(false);
		}

		// 是否推荐
		if (product.getIsCommend() == null) {
			product.setIsCommend(false);
		}
		// 是否热卖
		if (product.getIsHot() == null) {
			product.setIsHot(false);
		}
		// 保存商品时，返回商品id
		productDao.insertSelective(product);

		// 保存SKU 库存表数据
		System.out.println(product.getColors());
		System.out.println(product.getSizes());

		for (String color : product.getColors().split(",")) {
			// 遍历尺码
			for (String size : product.getSizes().split(",")) {
				Sku sku = new Sku();
				// 商品id
				sku.setProductId(product.getId());
				// 颜色id
				sku.setColorId(Long.parseLong(color));
				// 尺码
				sku.setSize(size);
				// 市场价
				sku.setMarketPrice(0f);
				// 售价
				sku.setPrice(0f);
				// 运费
				sku.setDeliveFee(10f);
				// 库存
				sku.setStock(0);
				// 购买的限购
				sku.setUpperLimit(200);
				// 时间
				sku.setCreateTime(new Date());
				// 保存库存表
				skuDao.insertSelective(sku);
			}
		}

	}

	// 商品上架保存到solr服务器
	@Autowired
	private SolrServer solrServer;

	@Autowired
	private JmsTemplate jmsTemplate;

	@Override
	public void isShow(Long[] ids) throws Exception {
		// 上架状态
		Product product = new Product();
		product.setIsShow(true);
		for (final Long id : ids) {
			product.setId(id);
			// 更改商品状态
			productDao.updateByPrimaryKeySelective(product);

			jmsTemplate.send(new MessageCreator() {

				@Override
				public Message createMessage(Session session) throws JMSException {
					return session.createTextMessage(String.valueOf(id));
				}
			});
		}
	}
	
	

}
